--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
tests/frontend/CallPage.test.js 33db12b971deeddf7b63d3e96fb5123a355b7986 (33db12b9) Text, 9.32 KB
Tff7b72import Tb4b4b4{ Te6edf3mount Tb4b4b4} Tff7b72from Ta5d6ff"@vue/test-utils"Tb4b4b4;
Tff7b72import Tb4b4b4{ Te6edf3describeTb4b4b4, Te6edf3itTb4b4b4, Te6edf3expectTb4b4b4, Te6edf3viTb4b4b4, Te6edf3beforeEachTb4b4b4, Te6edf3afterEach Tb4b4b4} Tff7b72from Ta5d6ff"vitest"Tb4b4b4;
Tff7b72import Te6edf3CallPage Tff7b72from Ta5d6ff"@/components/call/CallPage.vue"Tb4b4b4;
Te6edf3describeTb4b4b4(Ta5d6ff"CallPage.vue"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72let Te6edf3axiosMockTb4b4b4;
Te6edf3beforeEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3axiosMock Tff7b72= Tb4b4b4{
Te6edf3getTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockImplementationTb4b4b4(Tb4b4b4(Te6edf3urlTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3defaultData Tff7b72= Tb4b4b4{
Te6edf3configTff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3callsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3call_historyTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3announcesTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3voicemailsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3active_callTff7b72: Tff7b72nullTb4b4b4,
Te6edf3discoveryTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3contactsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3profilesTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3ringtonesTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3voicemailTff7b72: Tb4b4b4{ Te6edf3unread_countTff7b72: T79c0ff0 Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/api/v1/config"Tb4b4b4)Tb4b4b4) Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3configTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/api/v1/telephone/history"Tb4b4b4)Tb4b4b4) Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3call_historyTff7b72: Tb4b4b4[Tb4b4b4] Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/api/v1/announces"Tb4b4b4)Tb4b4b4) Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3announcesTff7b72: Tb4b4b4[Tb4b4b4] Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/api/v1/telephone/status"Tb4b4b4)Tb4b4b4) Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3active_callTff7b72: Tff7b72null Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/api/v1/telephone/voicemail/status"Tb4b4b4)Tb4b4b4)
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3has_espeakTff7b72: Tff7b72false Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/api/v1/telephone/ringtones/status"Tb4b4b4)Tb4b4b4)
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3enabledTff7b72: Tff7b72true Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/api/v1/telephone/ringtones"Tb4b4b4)Tb4b4b4) Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3ringtonesTff7b72: Tb4b4b4[Tb4b4b4] Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/api/v1/telephone/audio-profiles"Tb4b4b4)Tb4b4b4)
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3audio_profilesTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4, Te6edf3default_audio_profile_idTff7b72: Tff7b72null Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/api/v1/contacts"Tb4b4b4)Tb4b4b4) Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3contactsTff7b72: Tb4b4b4[Tb4b4b4] Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Te6edf3defaultData Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4,
Te6edf3postTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4,
Te6edf3patchTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4,
Tff7b72deleteTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tffa657windowTb4b4b4.Te6edf3api Tff7b72= Te6edf3axiosMockTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3afterEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72delete Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3mountCallPage Tff7b72= Tb4b4b4(Te6edf3routeQuery Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72return Te6edf3mountTb4b4b4(Te6edf3CallPageTb4b4b4, Tb4b4b4{
Tffa657globalTff7b72: Tb4b4b4{
Te6edf3mocksTff7b72: Tb4b4b4{
Te6edf3$tTff7b72: Tb4b4b4(Te6edf3keyTb4b4b4) Tb4b4b4=> Te6edf3keyTb4b4b4,
Te6edf3$routeTff7b72: Tb4b4b4{
Te6edf3queryTff7b72: Te6edf3routeQueryTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3stubsTff7b72: Tb4b4b4{
Te6edf3MaterialDesignIconTff7b72: Tff7b72trueTb4b4b4,
Te6edf3LoadingSpinnerTff7b72: Tff7b72trueTb4b4b4,
Te6edf3LxmfUserIconTff7b72: Tff7b72trueTb4b4b4,
Te6edf3ToggleTff7b72: Tff7b72trueTb4b4b4,
Te6edf3AudioWaveformPlayerTff7b72: Tff7b72trueTb4b4b4,
Te6edf3RingtoneEditorTff7b72: Tff7b72trueTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"respects tab query parameter on mount"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4{ Te6edf3tabTff7b72: Ta5d6ff"voicemail" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3activeTabTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"voicemail"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"performs optimistic mute updates"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e// Setup active call
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3activeCall Tff7b72= Tb4b4b4{
Te6edf3statusTff7b72: T79c0ff6Tb4b4b4, T8b949e// ESTABLISHED
Te6edf3is_mic_mutedTff7b72: Tff7b72falseTb4b4b4,
Te6edf3is_speaker_mutedTff7b72: Tff7b72falseTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e// Toggle mic
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3toggleMicrophoneTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e// Should be muted immediately (optimistic)
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3activeCallTb4b4b4.Te6edf3is_mic_mutedTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3axiosMockTb4b4b4.Te6edf3getTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledWithTb4b4b4(Te6edf3expectTb4b4b4.Te6edf3stringContainingTb4b4b4(Ta5d6ff"/api/v1/telephone/mute-transmit"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"renders tabs correctly"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e// The tabs are hardcoded strings: Phone, Phonebook, Voicemail, Contacts
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"Phone"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"Phonebook"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"Voicemail"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"Contacts"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"switches tabs when clicked"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e// Initial tab should be phone
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3activeTabTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"phone"Tb4b4b4)Tb4b4b4;
T8b949e// Click Phonebook tab
Tff7b72const Te6edf3buttons Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3findAllTb4b4b4(Ta5d6ff"button"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3phonebookTab Tff7b72= Te6edf3buttonsTb4b4b4.Te6edf3findTb4b4b4(Tb4b4b4(Te6edf3bTb4b4b4) Tb4b4b4=> Te6edf3bTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4) Tff7b72=== Ta5d6ff"Phonebook"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3phonebookTabTb4b4b4) Tb4b4b4{
Tff7b72await Te6edf3phonebookTabTb4b4b4.Te6edf3triggerTb4b4b4(Ta5d6ff"click"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3activeTabTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"phonebook"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"Phonebook tab not found"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"displays 'New Call' UI by default when no active call"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"New Call"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff'input[type="text"]'Tb4b4b4)Tb4b4b4.Te6edf3existsTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"attempts to place a call when 'Call' button is clicked"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3input Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff'input[type="text"]'Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3inputTb4b4b4.Te6edf3setValueTb4b4b4(Ta5d6ff"test-destination"Tb4b4b4)Tb4b4b4;
T8b949e// Find Call button - it's hardcoded "Call"
Tff7b72const Te6edf3buttons Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3findAllTb4b4b4(Ta5d6ff"button"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3callButton Tff7b72= Te6edf3buttonsTb4b4b4.Te6edf3findTb4b4b4(Tb4b4b4(Te6edf3bTb4b4b4) Tb4b4b4=> Te6edf3bTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4) Tff7b72=== Ta5d6ff"Call"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3callButtonTb4b4b4) Tb4b4b4{
Tff7b72await Te6edf3callButtonTb4b4b4.Te6edf3triggerTb4b4b4(Ta5d6ff"click"Tb4b4b4)Tb4b4b4;
T8b949e// CallPage.vue uses window.api.get(`/api/v1/telephone/call/${hashToCall}`)
Te6edf3expectTb4b4b4(Te6edf3axiosMockTb4b4b4.Te6edf3getTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledWithTb4b4b4(
Te6edf3expectTb4b4b4.Te6edf3stringContainingTb4b4b4(Ta5d6ff"/api/v1/telephone/call/test-destination"Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"Call button not found"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;
T8b949e// Keep in sync with tests/backend/test_lxst_telephony_profiles_contract.py
Tff7b72const Te6edf3LXST_TELEPHONY_AUDIO_PROFILES_CONTRACT Tff7b72= Tb4b4b4{
Te6edf3default_audio_profile_idTff7b72: T79c0ff64Tb4b4b4,
Te6edf3audio_profilesTff7b72: Tb4b4b4[
Tb4b4b4{ Te6edf3idTff7b72: T79c0ff16Tb4b4b4, Te6edf3nameTff7b72: Ta5d6ff"Ultra Low Bandwidth" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3idTff7b72: T79c0ff32Tb4b4b4, Te6edf3nameTff7b72: Ta5d6ff"Very Low Bandwidth" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3idTff7b72: T79c0ff48Tb4b4b4, Te6edf3nameTff7b72: Ta5d6ff"Low Bandwidth" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3idTff7b72: T79c0ff64Tb4b4b4, Te6edf3nameTff7b72: Ta5d6ff"Medium Quality" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3idTff7b72: T79c0ff80Tb4b4b4, Te6edf3nameTff7b72: Ta5d6ff"High Quality" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3idTff7b72: T79c0ff96Tb4b4b4, Te6edf3nameTff7b72: Ta5d6ff"Super High Quality" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3idTff7b72: T79c0ff112Tb4b4b4, Te6edf3nameTff7b72: Ta5d6ff"Ultra Low Latency" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3idTff7b72: T79c0ff128Tb4b4b4, Te6edf3nameTff7b72: Ta5d6ff"Low Latency" Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"getAudioProfiles maps API default and profile list (LXST contract)"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3axiosMockTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockResolvedValueOnceTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Te6edf3LXST_TELEPHONY_AUDIO_PROFILES_CONTRACT Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3getAudioProfilesTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3audioProfilesTb4b4b4)Tb4b4b4.Te6edf3toEqualTb4b4b4(Te6edf3LXST_TELEPHONY_AUDIO_PROFILES_CONTRACTTb4b4b4.Te6edf3audio_profilesTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3selectedAudioProfileIdTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff64Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"toggleDoNotDisturb patches config"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3config Tff7b72= Tb4b4b4{ Te6edf3do_not_disturb_enabledTff7b72: Tff7b72false Tb4b4b4}Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3toggleDoNotDisturbTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3axiosMockTb4b4b4.Te6edf3patchTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledWithTb4b4b4(Te6edf3expectTb4b4b4.Te6edf3stringContainingTb4b4b4(Ta5d6ff"/api/v1/config"Tb4b4b4)Tb4b4b4, Tb4b4b4{
Te6edf3do_not_disturb_enabledTff7b72: Tff7b72trueTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"toggleAllowCallsFromContactsOnly patches config"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3config Tff7b72= Tb4b4b4{ Te6edf3telephone_allow_calls_from_contacts_onlyTff7b72: Tff7b72false Tb4b4b4}Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3toggleAllowCallsFromContactsOnlyTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3axiosMockTb4b4b4.Te6edf3patchTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledWithTb4b4b4(Te6edf3expectTb4b4b4.Te6edf3stringContainingTb4b4b4(Ta5d6ff"/api/v1/config"Tb4b4b4)Tb4b4b4, Tb4b4b4{
Te6edf3telephone_allow_calls_from_contacts_onlyTff7b72: Tff7b72trueTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"ensureWebAudio stops when web audio bridge disabled"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3config Tff7b72= Tb4b4b4{ Te6edf3telephone_web_audio_enabledTff7b72: Tff7b72false Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3stop Tff7b72= Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4, Ta5d6ff"stopWebAudio"Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3ensureWebAudioTb4b4b4(Tb4b4b4{ Te6edf3enabledTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3stopTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"ensureWebAudio starts when bridge enabled and call active"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3config Tff7b72= Tb4b4b4{ Te6edf3telephone_web_audio_enabledTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3activeCall Tff7b72= Tb4b4b4{ Te6edf3statusTff7b72: T79c0ff6 Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3start Tff7b72= Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4, Ta5d6ff"startWebAudio"Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tff7b72undefinedTb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3ensureWebAudioTb4b4b4(Tb4b4b4{ Te6edf3enabledTff7b72: Tff7b72trueTb4b4b4, Te6edf3frame_msTff7b72: T79c0ff48 Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3startTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3audioFrameMsTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff48Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"ensureWebAudio stops when no active call"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3config Tff7b72= Tb4b4b4{ Te6edf3telephone_web_audio_enabledTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3activeCall Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72const Te6edf3stop Tff7b72= Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4, Ta5d6ff"stopWebAudio"Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3ensureWebAudioTb4b4b4(Tb4b4b4{ Te6edf3enabledTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3stopTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────